





<!DOCTYPE html>
<html class="writer-html5" lang="zh-CN" >
<head>
  <meta charset="utf-8">
  
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  
  <title>Git 使用技巧 &mdash; tvm 0.8.dev1982 文档</title>
  

  
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
  <link rel="stylesheet" href="../_static/css/theme.css" type="text/css" />
  <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
  <link rel="stylesheet" href="../_static/css/theme.css" type="text/css" />
  <link rel="stylesheet" href="../_static/gallery.css" type="text/css" />
  <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
  <link rel="stylesheet" href="../_static/css/tlcpack_theme.css" type="text/css" />

  
  
    <link rel="shortcut icon" href="../_static/tvm-logo-square.png"/>
  

  
  
  
  
    
      <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
        <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
        <script src="../_static/jquery.js"></script>
        <script src="../_static/underscore.js"></script>
        <script src="../_static/doctools.js"></script>
        <script src="../_static/translations.js"></script>
    
    <script type="text/javascript" src="../_static/js/theme.js"></script>

    
    <script type="text/javascript" src="../_static/js/tlcpack_theme.js"></script>
    <link rel="index" title="索引" href="../genindex.html" />
    <link rel="search" title="搜索" href="../search.html" />
    <link rel="next" title="Apache TVM Release Process" href="release_process.html" />
    <link rel="prev" title="Submit a Pull Request" href="pull_request.html" /> 
</head>

<body class="wy-body-for-nav">

   
  <div class="wy-grid-for-nav">
    
    
<header class="header">
    <div class="innercontainer">
      <div class="headerInner d-flex justify-content-between align-items-center">
          <div class="headerLogo">
               <a href="https://tvm.apache.org/"><img src=https://tvm.apache.org/assets/images/logo.svg alt="logo"></a>
          </div>

          <div id="headMenu" class="headerNav">
            <button type="button" id="closeHeadMenu" class="navCloseBtn"><img src="../_static/img/close-icon.svg" alt="Close"></button>
             <ul class="nav">
                <li class="nav-item">
                   <a class="nav-link" href=https://tvm.apache.org/community>Community</a>
                </li>
                <li class="nav-item">
                   <a class="nav-link" href=https://tvm.apache.org/download>Download</a>
                </li>
                <li class="nav-item">
                   <a class="nav-link" href=https://tvm.apache.org/vta>VTA</a>
                </li>
                <li class="nav-item">
                   <a class="nav-link" href=https://tvm.apache.org/blog>Blog</a>
                </li>
                <li class="nav-item">
                   <a class="nav-link" href=https://tvm.apache.org/docs>Docs</a>
                </li>
                <li class="nav-item">
                   <a class="nav-link" href=https://tvmconf.org>Conference</a>
                </li>
                <li class="nav-item">
                   <a class="nav-link" href=https://github.com/apache/tvm/>Github</a>
                </li>
                <li class="nav-item">
                   <a class="nav-link" href=https://tvmchinese.github.io/declaration_zh_CN.html>About-Translators</a>
                </li>
             </ul>
               <div class="responsivetlcdropdown">
                 <button type="button" class="btn-link">
                   ASF
                 </button>
                 <ul>
                     <li>
                       <a href=https://apache.org/>Apache Homepage</a>
                     </li>
                     <li>
                       <a href=https://www.apache.org/licenses/>License</a>
                     </li>
                     <li>
                       <a href=https://www.apache.org/foundation/sponsorship.html>Sponsorship</a>
                     </li>
                     <li>
                       <a href=https://www.apache.org/security/>Security</a>
                     </li>
                     <li>
                       <a href=https://www.apache.org/foundation/thanks.html>Thanks</a>
                     </li>
                     <li>
                       <a href=https://www.apache.org/events/current-event>Events</a>
                     </li>
                     <li>
                       <a href=https://www.zhihu.com/column/c_1429578595417563136>Zhihu</a>
                     </li>
                 </ul>
               </div>
          </div>
            <div class="responsiveMenuIcon">
              <button type="button" id="menuBtn" class="btn-menu"><img src="../_static/img/menu-icon.svg" alt="Menu Icon"></button>
            </div>

            <div class="tlcDropdown">
              <div class="dropdown">
                <button type="button" class="btn-link dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
                  ASF
                </button>
                <div class="dropdown-menu dropdown-menu-right">
                  <ul>
                     <li>
                       <a href=https://apache.org/>Apache Homepage</a>
                     </li>
                     <li>
                       <a href=https://www.apache.org/licenses/>License</a>
                     </li>
                     <li>
                       <a href=https://www.apache.org/foundation/sponsorship.html>Sponsorship</a>
                     </li>
                     <li>
                       <a href=https://www.apache.org/security/>Security</a>
                     </li>
                     <li>
                       <a href=https://www.apache.org/foundation/thanks.html>Thanks</a>
                     </li>
                     <li>
                       <a href=https://www.apache.org/events/current-event>Events</a>
                     </li>
                     <li>
                       <a href=https://www.zhihu.com/column/c_1429578595417563136>Zhihu</a>
                     </li>
                  </ul>
                </div>
              </div>
          </div>
       </div>
    </div>
 </header>
 
    <nav data-toggle="wy-nav-shift" class="wy-nav-side fixed">
      <div class="wy-side-scroll">
        <div class="wy-side-nav-search" >
          

          
            <a href="../index.html">
          

          
            
            <img src="../_static/tvm-logo-small.png" class="logo" alt="Logo"/>
          
          </a>

          
            
            
                <div class="version">
                  0.8.dev1982
                </div>
            
          

          
<div role="search">
  <form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
    <input type="text" name="q" placeholder="Search docs" />
    <input type="hidden" name="check_keywords" value="yes" />
    <input type="hidden" name="area" value="default" />
  </form>
</div>

          
        </div>

        
        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
          
            
            
              
            
            
              <p class="caption" role="heading"><span class="caption-text">如何开始</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="../install/index.html">安装 TVM</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="index.html">贡献者指南</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="community.html">TVM社区指南</a></li>
<li class="toctree-l2"><a class="reference internal" href="code_review.html">执行代码审查</a></li>
<li class="toctree-l2"><a class="reference internal" href="committer_guide.html">Committer Guide</a></li>
<li class="toctree-l2"><a class="reference internal" href="document.html">Write Documentation for TVM</a></li>
<li class="toctree-l2"><a class="reference internal" href="code_guide.html">代码指南和提示</a></li>
<li class="toctree-l2"><a class="reference internal" href="error_handling.html">Error Handling Guide</a></li>
<li class="toctree-l2"><a class="reference internal" href="pull_request.html">Submit a Pull Request</a></li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">Git 使用技巧</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#how-to-combine-multiple-commits-into-one">How to combine multiple commits into one</a></li>
<li class="toctree-l3"><a class="reference internal" href="#reset-to-the-most-recent-main-branch">Reset to the most recent main branch</a></li>
<li class="toctree-l3"><a class="reference internal" href="#recover-a-previous-commit-after-reset">Recover a Previous Commit after Reset</a></li>
<li class="toctree-l3"><a class="reference internal" href="#apply-only-k-latest-commits-on-to-the-main">Apply only k-Latest Commits on to the main</a></li>
<li class="toctree-l3"><a class="reference internal" href="#what-is-the-consequence-of-force-push">What is the consequence of force push</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="release_process.html">Apache TVM Release Process</a></li>
</ul>
</li>
</ul>
<p class="caption" role="heading"><span class="caption-text">用户引导</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../tutorial/index.html">User Tutorial</a></li>
<li class="toctree-l1"><a class="reference internal" href="../how_to/index.html">How To Guides</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">开发者引导</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../dev/tutorial/index.html">Developer Tutorial</a></li>
<li class="toctree-l1"><a class="reference internal" href="../dev/how_to/how_to.html">开发者指南</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">架构指南</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../arch/index.html">Design and Architecture</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">主题引导</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../topic/microtvm/index.html">microTVM：裸机使用TVM</a></li>
<li class="toctree-l1"><a class="reference internal" href="../topic/vta/index.html">VTA: Versatile Tensor Accelerator</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">参考指南</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../reference/langref/index.html">语言参考</a></li>
<li class="toctree-l1"><a class="reference internal" href="../reference/api/python/index.html">Python API</a></li>
<li class="toctree-l1"><a class="reference internal" href="../reference/api/links.html">Other APIs</a></li>
<li class="toctree-l1"><a class="reference internal" href="../reference/publications.html">Publications</a></li>
<li class="toctree-l1"><a class="reference internal" href="../genindex.html">索引</a></li>
</ul>

            
          
        </div>
        
      </div>
    </nav>

    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
      
      <nav class="wy-nav-top" aria-label="top navigation" data-toggle="wy-nav-top">
        
            <div class="togglemenu">

            </div>
            <div class="nav-content">
              <!-- tvm -->
              Table of content
            </div>
        
      </nav>


      <div class="wy-nav-content">
        
        <div class="rst-content">
        

          




















<div role="navigation" aria-label="breadcrumbs navigation">

  <ul class="wy-breadcrumbs">
    
      <li><a href="../index.html">Docs</a> <span class="br-arrow">></span></li>
        
          <li><a href="index.html">贡献者指南</a> <span class="br-arrow">></span></li>
        
      <li>Git 使用技巧</li>
    
    
      <li class="wy-breadcrumbs-aside">
        
            
            <a href="../_sources/contribute/git_howto.rst.txt" rel="nofollow"> <img src="../_static//img/source.svg" alt="viewsource"/></a>
          
        
      </li>
    
  </ul>

  
  <hr/>
</div>
          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
           <div itemprop="articleBody">
            
  <div class="section" id="git-usage-tips">
<span id="git-howto"></span><h1>Git 使用技巧<a class="headerlink" href="#git-usage-tips" title="永久链接至标题">¶</a></h1>
<p>以下是在工作中 Git 的一些使用技巧。</p>
<p>## 如何解决与 main 的冲突</p>
<ul class="simple">
<li><p>首先，rebase到main分支上最新的一次提交。</p></li>
</ul>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="c1"># The first two steps can be skipped after you do it once.</span>
git remote add upstream <span class="o">[</span>url to tvm repo<span class="o">]</span>
git fetch upstream
git rebase upstream/main
</pre></div>
</div>
<ul class="simple">
<li><p>The git may show some conflicts it cannot merge, say <cite>conflicted.py</cite>.</p>
<ul>
<li><p>Manually modify the file to resolve the conflict.</p></li>
<li><p>After you resolved the conflict, mark it as resolved by</p></li>
</ul>
</li>
</ul>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>git add conflicted.py
</pre></div>
</div>
<ul class="simple">
<li><p>Then you can continue rebase by</p></li>
</ul>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>git rebase --continue
</pre></div>
</div>
<ul class="simple">
<li><p>Finally push to your fork, you may need to force push here.</p></li>
</ul>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>git push --force
</pre></div>
</div>
<div class="section" id="how-to-combine-multiple-commits-into-one">
<h2>How to combine multiple commits into one<a class="headerlink" href="#how-to-combine-multiple-commits-into-one" title="永久链接至标题">¶</a></h2>
<p>Sometimes we want to combine multiple commits, especially when later commits are only fixes to previous ones,
to create a PR with set of meaningful commits. You can do it by following steps.</p>
<ul class="simple">
<li><p>Before doing so, configure the default editor of git if you haven’t done so before.</p></li>
</ul>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>git config core.editor the-editor-you-like
</pre></div>
</div>
<ul class="simple">
<li><p>Assume we want to merge last 3 commits, type the following commands</p></li>
</ul>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>git rebase -i HEAD~3
</pre></div>
</div>
<ul class="simple">
<li><p>It will pop up an text editor. Set the first commit as <cite>pick</cite>, and change later ones to <cite>squash</cite>.</p></li>
<li><p>After you saved the file, it will pop up another text editor to ask you modify the combined commit message.</p></li>
<li><p>Push the changes to your fork, you need to force push.</p></li>
</ul>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>git push --force
</pre></div>
</div>
</div>
<div class="section" id="reset-to-the-most-recent-main-branch">
<h2>Reset to the most recent main branch<a class="headerlink" href="#reset-to-the-most-recent-main-branch" title="永久链接至标题">¶</a></h2>
<p>You can always use git reset to reset your version to the most recent main.
Note that all your <strong>*local changes will get lost*</strong>.
So only do it when you do not have local changes or when your pull request just get merged.</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>git reset --hard <span class="o">[</span><span class="nb">hash</span> tag of main<span class="o">]</span>
</pre></div>
</div>
</div>
<div class="section" id="recover-a-previous-commit-after-reset">
<h2>Recover a Previous Commit after Reset<a class="headerlink" href="#recover-a-previous-commit-after-reset" title="永久链接至标题">¶</a></h2>
<p>Sometimes we could mistakenly reset a branch to a wrong commit.
When that happens, you can use the following command to show the list
of recent commits</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>git reflog
</pre></div>
</div>
<p>Once you get the right hashtag, you can use git reset again to change
the head to the right commit.</p>
</div>
<div class="section" id="apply-only-k-latest-commits-on-to-the-main">
<h2>Apply only k-Latest Commits on to the main<a class="headerlink" href="#apply-only-k-latest-commits-on-to-the-main" title="永久链接至标题">¶</a></h2>
<p>Sometimes it is useful to only apply your k-latest changes on top of the main.
This usually happens when you have other m-commits that are already merged
before these k-commits. Directly rebase against the main might cause merge conflicts
on these first m-commits(which are can be safely discarded).</p>
<p>You can instead use the following command</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="c1"># k is the concrete number</span>
<span class="c1"># Put HEAD~2 for the last 1 commit.</span>
git rebase --onto upstream/main HEAD~k
</pre></div>
</div>
<p>You can then force push to the main. Note that the above command will discard
all the commits before tha last k ones.</p>
</div>
<div class="section" id="what-is-the-consequence-of-force-push">
<h2>What is the consequence of force push<a class="headerlink" href="#what-is-the-consequence-of-force-push" title="永久链接至标题">¶</a></h2>
<p>The previous two tips requires force push, this is because we altered the path of the commits.
It is fine to force push to your own fork, as long as the commits changed are only yours.</p>
</div>
</div>


           </div>
           
          </div>
          

<footer>

    <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
      
        <a href="release_process.html" class="btn btn-neutral float-right" title="Apache TVM Release Process" accesskey="n" rel="next">下一个 <span class="fa fa-arrow-circle-right"></span></a>
      
      
        <a href="pull_request.html" class="btn btn-neutral float-left" title="Submit a Pull Request" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> 上一个</a>
      
    </div>

<div id="button" class="backtop"><img src="../_static//img/right.svg" alt="backtop"/> </div>
<section class="footerSec">
    <div class="footerHeader">
      <ul class="d-flex align-md-items-center justify-content-between flex-column flex-md-row">
        <li class="copywrite d-flex align-items-center">
          <h5 id="copy-right-info">© 2020 Apache Software Foundation | All right reserved</h5>
        </li>
      </ul>

    </div>

    <ul>
      <li class="footernote">Copyright © 2020 The Apache Software Foundation. Apache TVM, Apache, the Apache feather, and the Apache TVM project logo are either trademarks or registered trademarks of the Apache Software Foundation.</li>
    </ul>

</section>
</footer>
        </div>
      </div>

    </section>

  </div>
  

    <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" crossorigin="anonymous"></script>

  </body>
  <script type="text/javascript">
      jQuery(function () {
          SphinxRtdTheme.Navigation.enable(true);
      });
  </script>

  
  
    
    <!-- Theme Analytics -->
    <script>
    (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
      (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
      m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
    })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');

    ga('create', 'UA-75982049-2', 'auto');
    ga('send', 'pageview');
    </script>

    
   

</body>
</html>